/**
 * 文件名：SerialPortProtocol.java
 *
 * 创建人：Elvin Zhao - 279152260@qq.com
 *
 * 创建时间：2018年7月13日 上午11:05:54
 *
 * 版权所有：FNII
 */
package com.springvision.yuanfeng.core;

import com.springvision.yuanfeng.device.entity.DeviceMessage;

/**
 * [描述信息：说明类的基本功能] 串口协议格式：AA55010400000000FFFF 串口协议说明： 帧头：AA 55 ，0-3 指令：01，4-5
 * 数据长度：04，6-7 数据：00 00 00 00 8-15 帧尾：FF FF。16-19 16进制转10进制数据， 数据前两个字节表示地址，
 * 后两个字节代表数据大小，且后两位固定为小数
 *
 *
 * 
 * @author Elvin Zhao - 279152260@qq.com
 * @version 1.0 Created on 2018年7月13日 上午11:05:54
 */
public class SerialPortProtocol {

	private String device;

	private Float value;

	/**
	 * 帧头
	 */
	public static String _FRAME_HEADER = "aa55";

	/**
	 * 指令位
	 */
	public static String _FRAME_INSTRUCTION = "01";

	/**
	 * 长度
	 */
	public static String _FRAME_LENGTH = "04";

	/**
	 * 帧尾
	 */
	public static String _FRAME_TAIL = "ffff";

	/**
	 * 获取数据帧前部
	 * 
	 * @return
	 * @author: Elvin Zhao - 279152260@qq.com
	 * @date: Created on 2018年7月13日 上午11:16:31
	 */
	public static String _FRAME_BEFORE_DATA() {
		return _FRAME_HEADER + _FRAME_INSTRUCTION + _FRAME_LENGTH;
	}

	/**
	 * 获取数据帧尾部
	 * 
	 * @return
	 * @author: Elvin Zhao - 279152260@qq.com
	 * @date: Created on 2018年7月13日 上午11:18:53
	 */
	public static String _FRAME_AFTER_DATA() {
		return _FRAME_TAIL;
	}

	/**
	 * @param device
	 * @param value
	 */
	public SerialPortProtocol(String frame) {
		super();
		this.device = String.valueOf(Integer.parseInt(frame.substring(8, 12), 16));
		this.value = Integer.parseInt(frame.substring(12, 16), 16) / 100F;
	}

	public SerialPortProtocol() {
		super();
	}

	/**
	 *
	 * @return
	 */
	public String getDevice() {
		return device;
	}

	/**
	 *
	 * @param device
	 */
	public void setDevice(String device) {
		this.device = device;
	}

	/**
	 *
	 * @return
	 */
	public Float getValue() {
		return value;
	}

	/**
	 *
	 * @param value
	 */
	public void setValue(Float value) {
		this.value = value;
	}

	/**
	 * 转换成设备消息
	 * 
	 * @return
	 * @author: Elvin Zhao - 279152260@qq.com
	 * @date: Created on 2018年7月21日 下午2:12:00
	 */
	public DeviceMessage transformer() {
		return new DeviceMessage(this.device, this.value + "");
	}

	// 字节转换成十六进制字符串
	public static String bytesToHexString(byte[] src) {
		StringBuilder stringBuilder = new StringBuilder("");
		if (src == null || src.length <= 0) {
			return null;
		}
		for (int i = 0; i < src.length; i++) {
			int v = src[i] & 0xFF;
			String hv = Integer.toHexString(v);
			if (hv.length() < 2) {
				stringBuilder.append(0);
			}
			stringBuilder.append(hv);
		}
		return stringBuilder.toString();
	}

	/**
	 * {@inheritDoc}
	 * 
	 * @see java.lang.Object#toString()
	 * @author: Elvin Zhao - 279152260@qq.com
	 * @date: Created on 2018年7月21日 下午3:21:18
	 */
	@Override
	public String toString() {
		return "SerialPortProtocol [device=" + device + ", value=" + value + "]";
	}

	public static void main(String[] args) {
		SerialPortProtocol spp = new SerialPortProtocol("AA 55 01 04 00 02 09 B7 FF FF ");
		System.err.println(spp.toString());
	}

	/**
	 * 水位模块完整帧头
	 */
	public final static String _FR_MODULE_WATER_LEVEL = "aa5501";

	/**
	 * 气象模块完整帧头
	 */
	public final static String _FR_MODULE_WEATHER = "aa5505";

	/**
	 * 气象模块数据位长度
	 */
	public final static String _FR_WEATHER_LEN1 = "08";

	public final static String _FR_WEATHER_LEN2 = "04";

}
